package com.mmd.base.utils;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.mmd.core.pojo.request.PageParam;
import com.mmd.core.pojo.result.Pages;
import java.util.List;

public class PageUtils {

    /**
     * 初始化分页
     * @param param {@link PageParam} 分页基础类
     * @param <T> 数据类型
     */
    public static <T> Page<T> initPage(PageParam param){
        return initPage(param.getPage(), param.getSize());
    }

    /**
     * 初始化分页
     * @param page 分页
     * @param size 数量
     * @param <T> 数据类型
     */
    public static <T> Page<T> initPage(Integer page,Integer size){
        return new Page<T>(page, size);
    }

    /**
     * 初始化分页
     * @param param {@link PageParam} 分页基础类
     * @param <T> 数据类型
     * @param tClass 这一个参数是多余的但是可以很好的限定强制类型 可读性极强 适配快捷键
     */
    public static <T> Page<T> initPage(PageParam param,Class<T> tClass){
        return initPage(param.getPage(), param.getSize(),tClass);
    }

    /**
     * 初始化分页
     * @param page 分页
     * @param size 数量
     * @param <T> 数据类型
     * @param tClass 这一个参数是多余的但是可以很好的限定强制类型 可读性极强 适配快捷键
     */
    public static <T> Page<T> initPage(Integer page,Integer size,Class<T> tClass){
        return new Page<T>(page, size);
    }

    /**
     * 处理分页结果
     */
    public static <T> Pages<T> pages(Page<T> page){
        return Pages.<T>builder()
                .data(page.getRecords())
                .page(page.getCurrent())
                .pages(page.getPages())
                .size(page.getSize())
                .total(page.getTotal())
                .build();
    }

    /**
     * 处理分页结果
     */
    public static <T,B> Pages<B> pages(Page<T> page, List<B> data){
        return Pages.<B>builder()
                .data(data)
                .page(page.getCurrent())
                .pages(page.getPages())
                .size(page.getSize())
                .total(page.getTotal())
                .build();
    }
}
